วิธีการใช้งาน AWS Client VPN
สวัสดีครับ POP จากบริษัท Classmethod (Thailand) ครับ
ครั้งนี้จะมาแนะนำเกี่ยวกับการใช้งาน AWS Client VPN สำหรับ Desktop
AWS Client VPN คืออะไร
AWS Client VPN ให้บริการ Client แบบไม่คิดค่าใช้จ่าย คุณสามารถเชื่อมต่ออุปกรณ์คอมพิวเตอร์ของคุณเข้ากับ AWS Client VPN โดยตรงเพื่อสัมผัสประสบการณ์การใช้งาน VPN แบบ end-to-end
สิ่งที่ต้องมี
สร้าง VPC
ครั้งนี้เราจะสร้าง VPC ตามแผนภาพด้านล่างนี้โดยไม่มี Public IP ใน Region: Singapore
ดูตัวอย่างการสร้าง VPC ได้ที่ลิงก์บทความด้านล่างนี้ (ลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดู ตัวอย่างตั้งค่าการสร้าง VPC ของบทความครั้งนี้ ประกอบด้วย)
ตัวอย่างตั้งค่าการสร้าง VPC ของบทความครั้งนี้
Create VPC
VPC settings
Resources to create:◎ VPC and more
Name tag auto-generation
✅ Auto-generate:tinnakorn-cvpn-test
(เมื่อป้อนชื่อแล้วให้สังเกตการเปลี่ยนแปลงด้านขวา)
IPv4 CIDR block:10.0.0.0/16
(Default)
Number of Availability Zones (AZs):
1
Number of public subnets:0
Number of private subnets:1
▼ Customize subnets CIDR blocks (คลิกหัวข้อนี้ก่อนแล้วจะเห็นช่องสำหรับป้อน IP)
Private subnet CIDR block in ap-southeast-1a:10.0.0.0/24
(ตัวอย่าง)
DNS options
✅ Enable DNS hostnames
✅ Enable DNS resolution
สร้าง Certificate ด้วย ACM
เราจะสร้าง Certificate ด้วย ACM โดยการ Run Commands ตามแผนภาพด้านล่างนี้
ในอนาคตอาจมีการอัปเดตระบบหรือคำสั่ง หากลองทำแล้วไม่เป็นไปตามที่เขียนในบทความนี้ สามารถดูที่ลิงก์ AWS Documentation นี้เพิ่มเติมได้เลยครับ
Run Commands ใน AWS CloudShell
ตรวจสอบ Region ให้ตรงกับที่สร้าง VPC ไว้จากขั้นตอนที่แล้ว เช่น Singapore
แล้วคลิกไอคอน AWS CloudShell
แล้วรอสักครู่ ก็จะเห็น AWS CloudShell แสดงขึ้นมาจากด้านล่าง
รันคำสั่งนี้เพื่อติดตั้ง OpenSSL
sudo yum -y install openssl
รันคำสั่งนี้เพื่อ Clone easy-rsa.git
git clone https://github.com/OpenVPN/easy-rsa.git
เมื่อดาวน์โหลดเสร็จแล้ว รันคำสั่งนี้เพื่อเข้าไปที่โฟลเดอร์ easyrsa3
cd easy-rsa/easyrsa3
ต่อไปรันคำสั่งนี้เพื่อเริ่มต้น PKI (Public Key Infrastructure)
./easyrsa init-pki
ต่อไปรันคำสั่งนี้เพื่อสร้าง CA
./easyrsa build-ca nopass
Output (example) - 1: แล้วจะมีคำถามแสดงขึ้นมา ให้กดปุ่ม Enter
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx easyrsa3]$ ./easyrsa build-ca nopass
..+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.........+...........+.........+......+.......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+.......+..................+..+.+...............+.....+.......+.....................+.....+....+..+....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
......+.+..+...+....+...+..+....+......+...+.....+......+.+.....+................+........+.+...+........+...+....+...+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+..+....+.........+...+.........+.....+......+...+..........+..+....+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+.+.....+.+..+.+.....+.......+..+...+....+...+......+.....+.......+..+...+...............+........................+.........+.+.....+.+..+...........................+......+...+....+..+...+.+..+....+...........+.......+...+............+.....+............+.+..+.......+...+............+...+.................+.............+..+......+....+......+..+..........+...+..+......................+...+........+....+...+....................+..................+....+.........+.....+....+..+.+........+.......+..+.+.....+.........+.......+.....+.+...+...........+.............+..+....+......+........+.+.....+.+...+..+.+........+..........+.........+...+........+......+.+...+.....+......+...............+....+......+...+........+...+......+.+..+.......+........+.+..+.........+......+...+.+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
Output (example) - 2: เมื่อแสดงหน้าจอแบบนี้ถือว่าการสร้าง CA สำเร็จ
AWS CloudShell (ap-southeast-1)
Notice
------
CA creation complete. Your new CA certificate is at:
* /home/cloudshell-user/easy-rsa/easyrsa3/pki/ca.crt
[cloudshell-user@ip-xx-xx-xx-xx easyrsa3]$
ต่อไปรันคำสั่งนี้เพื่อสร้าง Certificates สำหรับ OpenVPN server
./easyrsa --san=DNS:server build-server-full server nopass
Output (example) - 1: แล้วจะมีคำถามแสดงขึ้นมา ให้พิมพ์ yes
แล้วกดปุ่ม Enter
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx easyrsa3]$ ./easyrsa --san=DNS:server build-server-full server nopass
....+...+.+...........+...+...+...+.+..................+...............+...+.........+..............+....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+...+.....+.........+......+.......+......+.....+....+........+.......+..+.+..+......+........................+...+...+....+..+....+............+...........................+......+.....+.+.....+..........+.....+.+..+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+...+...........+.+..+.+.....+......+.+..+..........+..+...+......+....+......+.........+...+..+...+..................+..........+..+.......+...+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
...+.+.........+......+..+.......+...+...+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*..+.+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*......+.................+...+.......+........+....+...+......+..+....+......+.........+........+.+..+...+....+...............+...+..............+.+.....+.........+.........+....+...+..+...+...+.........+.+......+......+.....+........................+....+...........+.....................+...+....+......+.....+.+...+......+...........+......+.........+.............+..+.+...+.....+......+...+.+...........+..........+...+.....+.+..+....+...............+......+..+......+.+......+.....+....+......+.....+.......+............+...+..+....+..............+.+.....+.+...+..................+.....+.........+.+..+...+...+......+....+.........+..+..........+..............+....+.....+......+......+.+..+.......+......+.......................+......+....+.....+.......+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /home/cloudshell-user/easy-rsa/easyrsa3/pki/reqs/server.req
* key: /home/cloudshell-user/easy-rsa/easyrsa3/pki/private/server.key
You are about to sign the following certificate:
Requested CN: 'server'
Requested type: 'server'
Valid for: '825' days
subject=
commonName = server
X509v3 Subject Alternative Name:
DNS:server
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Output (example) - 2: เมื่อแสดงหน้าจอแบบนี้ถือว่าการสร้าง Certificates สำหรับ OpenVPN server สำเร็จ
AWS CloudShell (ap-southeast-1)
Using configuration from /home/cloudshell-user/easy-rsa/easyrsa3/pki/b34c5d70/temp.2.1
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Sep 22 04:39:37 2026 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Notice
------
Certificate created at:
* /home/cloudshell-user/easy-rsa/easyrsa3/pki/issued/server.crt
Notice
------
Inline file created:
* /home/cloudshell-user/easy-rsa/easyrsa3/pki/inline/server.inline
[cloudshell-user@ip-xx-xx-xx-xx easyrsa3]$
ต่อไปรันคำสั่งนี้เพื่อสร้าง Certificates สำหรับแต่ละ OpenVPN client
./easyrsa build-client-full client1.domain.tld nopass
Output (example) - 1: แล้วจะมีคำถามแสดงขึ้นมา ให้พิมพ์ yes
แล้วกดปุ่ม Enter
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx easyrsa3]$ ./easyrsa build-client-full client1.domain.tld nopass
...+..+...+......+.+.....+......+..........+..+......+....+.................+.+.....+.........+......+...+.......+........+.+........+......+.+........+.+..+.......+..+...+...+...+.+...+..+....+..+.............+.........+.....+...+...+.+...+........+.........+....+...........+.+...+......+....................+.+............+..+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...........+...+.......+.........+..+...+....+......+..+.............+.........+............+.........+.....+..........+..+....+...+...+.....+.........+....+..+............+.+...........+...................+..+....+...+...+..+......+.+........+.......+..........................+...+.......+..+.+...........+..........+...+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
.......+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.........+...+..+...+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.........+...+.........+.+...+............+..+...+.......+......+..+....+...+......+......+...+..+.........+.......+..+...+.........+.+..+............+.............+..+......+.........+.........+....+....................+.......+......+............+..+.........+......+.+...+.....+............+...............+...+....+...+..+.......+...+..+.+...+...............+..+...+......+..........+......+.....+...+..........+.................+............+...+...+.........+.+......+.....+..........+...+...+..+...+...+......+.+...+..+.........+......+............+..........+...............+..+.+..+......+.......+...+.........+..+.+........+.........................+......+...............+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-----
Notice
------
Private-Key and Public-Certificate-Request files created.
Your files are:
* req: /home/cloudshell-user/easy-rsa/easyrsa3/pki/reqs/client1.domain.tld.req
* key: /home/cloudshell-user/easy-rsa/easyrsa3/pki/private/client1.domain.tld.key
You are about to sign the following certificate:
Requested CN: 'client1.domain.tld'
Requested type: 'client'
Valid for: '825' days
subject=
commonName = client1.domain.tld
Type the word 'yes' to continue, or any other input to abort.
Confirm request details: yes
Output (example) - 2: เมื่อแสดงหน้าจอแบบนี้ถือว่าการสร้าง Certificates สำหรับแต่ละ OpenVPN client สำเร็จ
AWS CloudShell (ap-southeast-1)
Using configuration from /home/cloudshell-user/easy-rsa/easyrsa3/pki/d0a28304/temp.2.1
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'client1.domain.tld'
Certificate is to be certified until Sep 22 04:48:20 2026 GMT (825 days)
Write out database with 1 new entries
Data Base Updated
Notice
------
Certificate created at:
* /home/cloudshell-user/easy-rsa/easyrsa3/pki/issued/client1.domain.tld.crt
Notice
------
Inline file created:
* /home/cloudshell-user/easy-rsa/easyrsa3/pki/inline/client1.domain.tld.inline
[cloudshell-user@ip-xx-xx-xx-xx easyrsa3]$
รันคำสั่งนี้เพื่อสร้างโฟลเดอร์ custom_folder
mkdir ~/custom_folder/
รันคำสั่งตามนี้เพื่อย้ายไฟล์ที่ได้จากการรันคำก่อนหน้านี้ไปยังโฟลเดอร์ custom_folder
(สามารถรันคำสั่งพร้อมกันได้เลย)
cp pki/ca.crt ~/custom_folder/
cp pki/issued/server.crt ~/custom_folder/
cp pki/private/server.key ~/custom_folder/
cp pki/issued/client1.domain.tld.crt ~/custom_folder/
cp pki/private/client1.domain.tld.key ~/custom_folder/
cd ~/custom_folder/
รันคำสั่งนี้เพื่อดูข้อมูล
ll
Output (example): แล้วจะเห็นไฟล์ที่ย้ายเข้ามา โดยไฟล์เหล่านี้เป็น Key สำหรับการใช้งาน VPN
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx custom_folder]$ ll
total 28
-rw-------. 1 cloudshell-user cloudshell-user 1204 Jun 19 05:14 ca.crt
-rw-------. 1 cloudshell-user cloudshell-user 4522 Jun 19 05:14 client1.domain.tld.crt
-rw-------. 1 cloudshell-user cloudshell-user 1704 Jun 19 05:14 client1.domain.tld.key
-rw-------. 1 cloudshell-user cloudshell-user 4609 Jun 19 05:14 server.crt
-rw-------. 1 cloudshell-user cloudshell-user 1704 Jun 19 05:14 server.key
[cloudshell-user@ip-xx-xx-xx-xx custom_folder]$
รันคำสั่งตามนี้เพื่อสร้าง ACM สำหรับ Server โดยระบุ [Region]
ที่เรากำลังเข้าใช้งานอยู่ เช่น ap-southeast-1
(Singapore) ก็จะเป็น --region ap-southeast-1
แบบนี้
(ตอนนี้ AWS CloudShell กำลังทำงานในรีเจี้ยน Sydney เราจึงต้องระบุเป็น Region: Singapore
)
aws acm import-certificate --region [Region] --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
Output (example): เมื่อแสดงหน้าจอแบบนี้ถือว่าการสร้าง ACM สำหรับ Server สำเร็จ
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx custom_folder]$ aws acm import-certificate --region ap-southeast-1 --certificate fileb://server.crt --private-key fileb://server.key --certificate-chain fileb://ca.crt
{
"CertificateArn": "arn:aws:acm:ap-southeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
[cloudshell-user@ip-xx-xx-xx-xx custom_folder]$
รันคำสั่งตามนี้เพื่อสร้าง ACM สำหรับ Client โดยระบุ [Region]
ที่เรากำลังเข้าใช้งานอยู่ เช่น ap-southeast-1
(Singapore) ก็จะเป็น --region ap-southeast-1
แบบนี้
(ตอนนี้ AWS CloudShell กำลังทำงานในรีเจี้ยน Sydney เราจึงต้องระบุเป็น Region: Singapore
)
aws acm import-certificate --region [Region] --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt
Output (example): เมื่อแสดงหน้าจอแบบนี้ถือว่าการสร้าง ACM สำหรับ Client สำเร็จ
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx custom_folder]$ aws acm import-certificate --region ap-southeast-1 --certificate fileb://client1.domain.tld.crt --private-key fileb://client1.domain.tld.key --certificate-chain fileb://ca.crt
{
"CertificateArn": "arn:aws:acm:ap-southeast-1:xxxxxxxxxxxx:certificate/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
}
[cloudshell-user@ip-xx-xx-xx-xx custom_folder]$
ตรวจสอบ Certificate
ตรวจสอบว่ามี Certificate ที่หน้าจอ AWS Certificate Manager (ACM)
ให้พิมพ์ Certificate Manager
ในช่องค้นหา แล้วเลือก Certificate Manager
เลือก Region ตามที่เราระบุไว้ตอนรันคำสั่งสร้าง ACM เช่น ap-southeast-1
= Singapore
แล้วเลือก List certificates
ก็จะเห็น Certificates 2 อันตามที่เราสร้างไว้โดยการรันคำสั่งก่อนหน้านี้
Download file
กลับมาที่หน้าจอที่เปิด AWS CloudShell ไว้อยู่ แล้วดาวน์โหลดไฟล์ client1.domain.tld.crt
และ client1.domain.tld.key
โดยตรงจาก AWS CloudShell ดังนี้เพื่อนำไปใช้ภายหลัง
คลิก Actions
จากมุมขวาบน แล้วเลือก Download file
เมื่อแสดง POPUP แบบนี้ ให้ป้อน Path ลงใน Individual file path ตามด้านล่างนี้และคลิก Download
~/custom_folder/client1.domain.tld.crt
จากนั้นให้ดาวน์โหลดไฟล์อีกครั้งโดยป้อน Path ลงใน Individual file path ตามด้านล่างนี้และคลิก Download
~/custom_folder/client1.domain.tld.key
เมื่อดาวน์โหลดทั้ง 2 ไฟล์แล้ว ก็จะได้ไฟล์ client1.domain.tld.crt
และ client1.domain.tld.key
อยู่ในอุปกรณ์ของเรา
สร้าง AWS Client VPN ใน Amazon VPC
เราจะสร้าง Client VPN endpoints ตามแผนภาพด้านล่างนี้ ใน Region: Singapore
ให้กลับไปที่หน้าจอ VPC แล้วเลือก Client VPN endpoints
ในหัวข้อ ▼ Virtual private network (VPN) จากเมนูด้านซ้าย แล้วคลิก Create client VPN endpoint
ด้านขวา
เมื่อเข้ามาที่หน้า Create client VPN endpoint แล้วจะทำการตั้งค่าดังนี้
Details
Name: tinnakorn-cvpn-test
Client IPv4 CIDR: 10.1.0.0/22
Authentication information
Server certificate ARN: server
(เลือก ACM ของ "Server")
Authentication options: ติ๊ก ✅
Use mutual authentication
Client certificate ARN: client1.domain.tld
(เลือก ACM ของ "client1.domain.tld")
Other parameters - optional
Enable split-tunnel: เลื่อนมาด้านขวาเพื่อเปิดใช้งาน
หมายเหตุ: การเปิดใช้งาน split-tunnel จะทำให้เราเปิดใช้งาน Client VPN แล้วจะเกิดการแบ่งการเชื่อมต่อดังนี้
AWS Endpoint > ใช้ IP ของ Client VPN
Endpoint อื่นๆ > ใช้ IP ของเครื่องเราเอง
ซึ่งการทำแบบนี้จะช่วยลดการถ่ายโอนข้อมูลของ Client VPN ซึ่งจะมีส่วนในการลดค่าใช้จ่ายที่จะเกิดขึ้นได้
VPC ID: เลือก VPC ที่สร้างไว้ตอนแรก เช่น tinnakorn-cvpn-test
เลื่อนลงมาด้านล่างสุดแล้วคลิก Create client VPN endpoint
เมื่อแสดงหน้าจอแบบนี้แล้ว จะเห็นว่า State เป็น Pending-associate
ให้รอการเริ่มต้นระบบสักครู่โดยอาจใช้เวลาประมาณ 10 นาที ในระหว่างที่รอเราสามารถเริ่มทำขั้นตอนถัดไปได้เลย
ให้เลือก Client VPN endpoints ของเรา เช่น tinnakorn-cvpn-test
แล้วจะมีหน้าต่างปรากฏขึ้นมาจากด้านล่าง จากนั้นให้เลือกแท็บ Target network associations
แล้วคลิก Associate target network
เมื่อเข้ามาหน้า Associate target network ก็ให้เลือก VPC และ Choose a subnet to associate ที่สร้างไว้ก่อนหน้านี้ แล้วคลิก Associate target network
แล้วเลือกแท็บ Target network associations
ด้านล่าง จะเห็นว่า State เป็น Associating
ไม่ต้องรอให้เสร็จ ให้ทำขั้นตอนถัดไปได้เลย
ต่อไปเลือกแท็บ Authorization rules
แล้วคลิก Add authorization rule
เมื่อเข้ามาหน้า Add authorization rule ก็ให้ป้อนหรือเลือก Destination network to enable access
ที่ต้องการ
ในตัวอย่างนี้คือ 0.0.0.0/0
แล้วคลิก Add authorization rule
แล้วเลือกแท็บ Authorization rules
ด้านล่าง จะเห็นว่า State เป็น Authorizing
ไม่ต้องรอให้เสร็จ ให้ทำขั้นตอนถัดไปได้เลย
ต่อไปให้ดูด้านบนที่ Client VPN endpoints แล้วคลิก Download client configuration
แล้วจะมี POPUP แสดงขึ้นมา ให้คลิก Download client configuration
อีกครั้งเพื่อดาวน์โหลด
เมื่อดาวน์โหลดเสร็จแล้วจะได้ไฟล์ downloaded-client-config.ovpn
อยู่ในอุปกรณ์ของเรา
ทีนี้กลับมาดูที่ Client VPN endpoints อีกครั้ง หากเริ่มต้นระบบเสร็จแล้ว State จะเปลี่ยนเป็น ✅ Available
(ครั้งนี้ใช้เวลาประมาณ 10 นาที)
หรือหาก State ยังเป็น Pending-associate
อยู่ ไม่จำเป็นต้องรอ ให้ทำขั้นตอนถัดไปได้เลย
การใช้งาน AWS Client VPN for Desktop
ดาวน์โหลด AWS Client VPN for Desktop
ดาวน์โหลด AWS Client VPN Download
ติดตั้ง AWS Client VPN for Desktop
เมื่อดาวน์โหลดเสร็จแล้วจะได้ไฟล์ AWS_VPN_Client.msi
ให้ดับเบิ้ลคลิกที่ไฟล์ติดตั้ง แล้วทำการติดตั้งดังนี้
เตรียมไฟล์
เราต้องเตรียมไฟล์ downloaded-client-config.ovpn ที่ดาวน์โหลดมาก่อนหน้านี้เพื่อจะนำไปใช้กับโปรแกรม AWS Client VPN ภายหลัง
ก่อนอื่นให้นำไฟล์ downloaded-client-config.ovpn
ไปเปิดใน Notepad ที่เราใช้งานอยู่เตรียมไว้ แล้วจะแสดงเนื้อหาแบบนี้ (ในตัวอย่างนี้จะใช้ Notepad ของ Windows)
ต่อไปให้เปิดไฟล์ client1.domain.tld.crt ใน Notepad แล้วเลื่อนลงมาด้านล่างสุด ก็จะแสดงเนื้อหาแบบนี้ แล้วให้คัดลอกเนื้อหาในส่วนของ BEGIN CERTIFICATE
ตรงที่ครอบเตรียมไว้
กลับมาที่ไฟล์ downloaded-client-config.ovpn
แล้วเลื่อนลงมาด้านล่างสุด แล้ว Enter เพื่อเพิ่มไป 3 บรรทัดและพิมพ์ tag code ตามด้านล่างนี้
แล้ววาง BEGIN CERTIFICATE
ที่คัดลอกมาลงใน tag code ก็จะได้ตามรูปภาพด้านล่าง แล้วทำการ Save
(* เมื่อวางไปแล้วอย่าให้มีบรรทัดว่าง เพราะจะทำให้โปรแกรมไม่ทำงาน)
<cert> </cert>
ต่อไปให้เปิดไฟล์ client1.domain.tld.key ใน Notepad ก็จะแสดงเนื้อหาแบบนี้ แล้วให้คัดลอกเนื้อหาในส่วนของ BEGIN PRIVATE KEY
ตรงที่ครอบเตรียมไว้
กลับมาที่ไฟล์ downloaded-client-config.ovpn
อีกครั้ง แล้วเลื่อนลงมาด้านล่างสุด แล้ว Enter เพื่อเพิ่มไป 2 บรรทัดและพิมพ์ tag code ตามด้านล่างนี้
แล้ววาง BEGIN PRIVATE KEY
ที่คัดลอกมาลงใน tag code ก็จะได้ตามรูปภาพด้านล่าง แล้วทำการ Save
(* เมื่อวางไปแล้วอย่าให้มีบรรทัดว่าง เพราะจะทำให้โปรแกรมไม่ทำงาน)
<key> </key>
ตรวจสอบ State ใน Client VPN endpoints
กลับไปที่หน้าจอ Client VPN endpoints แล้วตรวจสอบ State
ตามนี้
ตรวจสอบ Client VPN endpoint ของเรา เช่น
・Name: tinnakorn-cvpn-test
| State: Available
・แท็บ Target network associations
| State: Associated
・แท็บ Authorization rules
| State: Active
เมื่อ State
เป็นเหมือนกับรูปภาพด้านบนทั้งหมดแล้ว ให้เริ่มทำขั้นตอนถัดไป
การใช้งาน AWS Client VPN
โปรแกรม AWS VPN Client ที่ติดตั้งเมื่อสักครู่จะแสดง Icon บนหน้าจอ Desktop แบบนี้ ให้คลิกเปิดโปรแกรมขึ้นมา
แล้วโปรแกรมจะแสดงหน้าจอแบบนี้ ให้เลือก Connection
จะเห็นว่า Connection Details แสดงเป็น Disconnected
ซึ่งเราต้องเพิ่ม Profile ก่อนจึงจะสามารถเชื่อมต่อได้
เลือก File
เลือก Manage Profiles
ป้อน Display Name
ตามต้องการและ Browse VPN Configuration File
(downloaded-client-config.ovpn) ที่เตรียมไว้ก่อนหน้านี้ แล้วคลิก Add Profile
เลือก Profile ที่เราเพิ่ม แล้วคลิก Connect
แล้วรอการเชื่อมต่อสักครู่
เมื่อเชื่อมต่อสำเร็จ ข้อมูลการเชื่อมต่อจะแสดงใน Connection Details แบบนี้
เมื่อทำขั้นตอนในส่วนของ VPC เสร็จทั้งหมดแล้ว เราจะใช้การตั้งค่าของ VPC นี้ไปใช้กับ EC2 Instance ในขั้นตอนถัดไป
การสร้าง Windows Server ใน Amazon EC2
ครั้งนี้จะสร้าง Microsoft Windows Server 2022 Base ขึ้นมาเพื่อทดสอบการใช้งานกับ Client VPN ตามแผนภาพด้านล่างนี้
ซึ่งเราสามารถใช้ EC2 Instance อะไรก็ได้ แต่เนื่องจาก Windows Server เป็นการแนะนำที่ทำให้เข้าใจได้ง่ายกว่า ดังนั้นการแนะนำครั้งนี้จึงเลือกเป็น Windows Server
ดูตัวอย่างการสร้าง Windows Server ได้ที่ลิงก์บทความด้านล่างนี้ (ลิงก์บทความด้านล่างนี้เป็นแค่ตัวอย่าง ซึ่งมีการตั้งค่าบางส่วนที่แตกต่างกัน แนะนำให้ดู ตัวอย่างตั้งค่าการสร้าง Windows Server ของบทความครั้งนี้ ประกอบด้วย)
ตัวอย่างตั้งค่าการสร้าง Windows Server ใน EC2 ของบทความครั้งนี้
※Create Key pairs
Key pairs:tinnakorn-cvpn-test
(ตั้งชื่อที่ต้องการ)
Key pair type:RSA
Private key file format: ◉.pem
※Launch instances
Name and tags
Name:tinnakorn-cvpn-test
(ตั้งชื่อที่ต้องการ)Application and OS Images (Amazon Machine Image)
Amazon Machine Image (AMI):Microsoft Windows Server 2022 Base
Instance type
Instance type:t3a.medium
Key pair (login)
Key pair name - required:tinnakorn-cvpn-test
(key pair ที่สร้างขึ้นเมื่อสักครู่นี้)Network settings
VPC: tinnakorn-cvpn-test-vpc (VPC ที่สร้างขึ้นตอนแรก)
Subnet: tinnakorn-cvpn-test-subnet-private1-ap-southeast-1a (Subnet ที่ได้มาจากการสร้าง VPC ตอนแรก)
Auto-assign public IP:Disable
(Default)
Firewall (security groups)
Security group name - required:tinnakorn-cvpn-test
(ตั้งชื่อที่ต้องการ)
Description - required:tinnakorn-cvpn-test
(ป้อนตามต้องการ)
Inbound security groups rules
▼ Security group rule 1 (TCP, 3389, xxx.xxx.xxx.xxx/32)
Type:rdp
| Source type:Custom
| Source: 10.0.0.0/16 (การตั้งค่านี้จะทำให้มีแค่การเชื่อมต่อที่มาจากภายใน VPC เท่านั้น ที่สามารถเชื่อมต่อเข้ามาได้ และเนื่องจากการเชื่อมต่อจาก Client VPN จะถูกแปลงเป็นการเชื่อมต่อที่มาจากภายใน VPC ดังนั้นการตั้งค่านี้จึงทำให้สามารถเชื่อมต่อจาก Client VPN ได้ด้วย)Configure storage
1x:30
GiBgp2
Root volume (Default)
ตรวจสอบ Private IPv4 ใน EC2 Instance
เข้ามาที่หน้าจอ EC2 Instance (Windows Server) ของเรา จะเห็นว่ามี Private IPv4 addresses: 10.0.0.xxx
อยู่ แต่ไม่มี Public IPv4 DNS
ตรวจสอบการเข้าถึง Internet ใน Windows Server
เมื่อเราเปิดใช้งาน Client VPN แล้ว IP เราจะถูกเปลี่ยนเป็น IP ที่อยู่ใน Client CIDR (10.2.0.0/22) ซึ่งจะอยู่ในระยะของการตั้งค่า Inbound ของ Security Group ที่ตั้งค่าไว้ (10.0.0.0/16) ทำให้เราสามารถเข้าเชื่อมต่อ EC2 Instance Windows Server ที่เราสร้างขึ้นใน Private Subnet ได้ และเมื่อเราเข้าไปเปิดเบราว์เซอร์ที่อยู่ใน EC2 Instance Windows Server จะเห็นได้ว่าเราจะไม่สามารถใช้งานเว็บไซต์ต่างๆได้ เนื่องจากไม่มีทางออกไป Internet gateway นั่นเอง
การลบ AWS Resource ที่สร้างขึ้นในบทความนี้
การลบฟังก์ชันใน Service ต่างๆ ถ้าเราไม่รู้ลำดับของการลบฟังก์ชันก็จะทำให้เกิด Error ในขณะลบ หรือไม่สามารถลบได้นั่นเอง เช่น ถ้าทำการลบ Security Group ที่กำลังเชื่อมต่ออยู่กับ EC2 โดยที่ไม่ Terminate EC2 ก่อน ก็จะไม่สามารถลบ Security Group ได้ เป็นต้น ดังนั้นแนะนำให้ลบตามขั้นตอนที่ผมเรียงไว้ได้เลยครับ
การลบฟังก์ชันที่ได้สร้างขึ้นใน Service ต่างๆ
ลบเรียงตามขั้นตอนดังนี้:
- Amazon EC2
- Instance
- Key Pairs
- Amazon VPC
- Target network associations
- Client VPN endpoints
- Your VPCs
- AWS Certificate Manager (ACM)
- Certificates
- AWS CloudShell
- ลบโฟลเดอร์
custom_folder
ที่สร้างด้วยการ Run Command
การลบ Amazon EC2 (Instance, Key Pair)
เข้ามาที่หน้าจอ Service EC2
แล้วทำการลบ
※Instance
เลือก Instance
จากเมนูด้านซ้าย เลือก Instance ที่ต้องการลบ แล้วเลือก Instance state
แล้วเลือก Terminate instance
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
(การ Terminate Instance ต้องรอจนกว่า Instance state เป็น Terminated
จึงจะเสร็จสมบูรณ์)
※Key Pair
เลือก Key Pair
จากเมนูด้านซ้าย เลือก Actions
แล้วเลือก Delete
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
การลบ Amazon VPC
เข้ามาที่หน้าจอ Service VPC » Client VPN endpoints
แล้วทำการลบ
※Target network associations
เลือก Client VPN endpoints
จากเมนูด้านซ้าย เลือก Client VPN endpoints ที่ต้องการลบ แล้วเลือกแท็บ Target network associations
แล้วเลือก Association ID
แล้วคลิก Disassociate
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
※Client VPN endpoints
เลือก Actions
แล้วเลือก Delete client VPN endpoint
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
※Your VPCs
เลือก Your VPCs
จากเมนูด้านซ้าย เลือก VPC ที่ต้องการลบ แล้วเลือก Actions
แล้วเลือก Delete VPC
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
การลบ AWS Certificate Manager
เข้ามาที่หน้าจอ Service ACM » List certificates
แล้วทำการลบ
※Certificates
เลือก List certificates
จากเมนูด้านซ้าย เลือก Certificate ID
ที่ต้องการลบ แล้วเลือก Delete
และเมื่อมี POPUP แสดงขึ้นมา ให้ยืนยันการลบตามคำแนะนำ
การลบไฟล์ใน AWS CloudShell
การลบขั้นตอนนี้จะลบโดยการ Run Command
ให้เปิด AWS CloudShell
ขึ้นมา แล้วรันคำสั่งตามนี้
※AWS CloudShell
รันคำสั่งนี้เพื่อกลับมาที่ /home/cloudshell-user
cd ~
แล้วรันคำสั่งนี้เพื่อตรวจสอบไฟล์
ll
Output (example): จะเห็นว่ามีโฟลเดอร์ easy-rsa
และ custom_folder
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx ~]$ ll
total 8
drwxrwxr-x 2 cloudshell-user cloudshell-user 4096 May 16 08:01 custom_folder
drwxrwxr-x 10 cloudshell-user cloudshell-user 4096 May 16 07:52 easy-rsa
[cloudshell-user@ip-xx-xx-xx-xx ~]$
แล้วรันคำสั่งตามนี้เพื่อลบโฟลเดอร์ easy-rsa
และ custom_folder
rm -rf easy-rsa/ custom_folder/
แล้วตรวจสอบด้วยคำสั่งด้านล่างนี้อีกครั้ง
ll
Output (example): จะเห็นว่าโฟลเดอร์ easy-rsa
และ custom_folder
ถูกลบไปแล้ว
AWS CloudShell (ap-southeast-1)
[cloudshell-user@ip-xx-xx-xx-xx ~]$ ll
total 0
[cloudshell-user@ip-xx-xx-xx-xx ~]$
การสาธิตการใช้งาน Client VPN ก็จบเพียงเท่านี้ครับ
ราคา AWS VPN
- AWS Client VPN endpoint association $0.15 per hour
นี่คือค่าบริการที่ต้องจ่ายเมื่อสร้าง Client VPN และโปรดทราบว่าถึงแม้จะไม่มีการเชื่อมต่อจาก Client VPN แต่ก็ยังมีค่าใช้จ่าย - AWS Client VPN connection $0.05 per hour
นี่คือค่าบริการสำหรับเวลาที่มีการเชื่อมต่อจาก Client VPN ซึ่งเราสามารถลดค่าบริการได้โดยลดระยะเวลาการเชื่อมต่อจาก Client VPN
ตรวจสอบราคา AWS VPN เพิ่มเติมได้ที่ลิงก์ด้านล่างนี้ครับ
ราคา AWS VPN
สรุป
เราสามารถเข้าถึง EC2 Instance ภายใน VPC ผ่าน Client VPN จาก Client PC ของเราได้ แต่เราไม่สามารถเข้าถึงจาก EC2 Instance ภายนอก VPC ได้ ดังนั้นการใช้งาน AWS Client VPN จะทำให้มีความปลอดภัยมากยิ่งขึ้น
ผมหวังว่าบทความนี้จะเป็นประโยชน์ให้กับผู้อ่านได้นะครับ
POP จากบริษัท Classmethod (Thailand) ครับ !